import java.util.*;


public class code3 {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param grid int整型二维数组
     * @return int整型
     */
    int m;
    int n;
    int[][] memo;
    public int maxValue (int[][] grid) {
        m = grid.length;
        n = grid[0].length;
        memo = new int[m][n];
        return dfs(grid,0,0);
    }

    public int dfs(int[][] grid,int x,int y) {
        //出口
        if(x >= m || y >= n) return 0;

        // 如果记忆中有就直接返回
        if (memo[x][y] != 0) return memo[x][y];


        int down = dfs(grid,x+1,y);//向下
        int right = dfs(grid,x,y+1);//向右

        memo[x][y] = grid[x][y] + Math.max(down,right);
        return memo[x][y];
    }
}